package com.lytfly.flowable.modules.flow.service;

import com.lytfly.flowable.domain.*;
import com.lytfly.flowable.entity.Personal;
import org.flowable.engine.runtime.ProcessInstance;

import java.util.List;
import java.util.Map;

/**
 * @program: flow
 * @description: 流程实例service
 * @author: Bruce.Liu
 * @create: 2021-04-20 14:20
 **/
public interface IFlowableProcessInstanceService {
    /**
     * 启动流程
     *
     * @param params 启动参数
     * @return 流程实例
     */
    ProcessInstance startProcessInstanceByKey(StartProcessInstanceVO params);

    /**
     * @param params   启动参数
     * @param personal 发起人
     * @return
     */
    Map<String, Object> getStartVariables(StartProcessInstanceVO params, Personal personal);

    /**
     * 查询我发起的流程列表
     *
     * @param paramsVO 查询参数
     * @param query    查询参数
     * @return
     * @throws Exception
     */
    List<ProcessInstanceVO> findMyProcessInstanceByPage(InstanceQueryParamsVO paramsVO, Query query);

    /**
     * 拒绝(终止流程)
     *
     * @param endVO 基本参数
     * @return
     */
    void stopProcess(EndVO endVO);


    /**
     * 撤回流程
     *
     * @param revokeVO 参数
     * @return
     */
    public void revokeProcess(RevokeProcessVO revokeVO);

    /**
     * 激活或者挂起流程定义
     *
     * @param processInstanceId 流程实例id
     * @param suspensionState   1:挂起;2:激活;
     */
    public void suspendOrActivateProcessInstanceById(String processInstanceId, Integer suspensionState);
    /**
     * 获取流程图图片
     *
     * @param processInstanceId 流程实例id
     * @return
     */
    public byte[] createProcessInstanceImage(String processInstanceId);
}
